/**
 * Builtin Prompt Templates
 * 
 * 内置提示词模板库 - 精选常用场景
 */

import type { PromptTemplate } from '@/types/prompt';

/**
 * 内置提示词模板列表（精选 20+ 常用模板）
 */
export const BUILTIN_PROMPT_TEMPLATES: PromptTemplate[] = [
  // ==================== 代码相关 ====================
  {
    id: 'code_review',
    name: '代码审查',
    description: '全面审查代码质量、安全性和最佳实践',
    category: 'code',
    template: `请审查以下代码，重点关注：

1. 代码质量和可读性
2. 潜在的bug和安全问题
3. 性能优化建议
4. 最佳实践遵循情况

代码语言：{{language}}

\`\`\`{{language}}
{{code}}
\`\`\`

请提供详细的审查意见和改进建议。`,
    variables: [
      { name: 'language', label: '编程语言', type: 'select', required: true, 
        options: [
          { label: 'JavaScript', value: 'javascript' },
          { label: 'TypeScript', value: 'typescript' },
          { label: 'Python', value: 'python' },
          { label: 'Java', value: 'java' },
          { label: 'Go', value: 'go' },
        ]
      },
      { name: 'code', label: '代码', type: 'textarea', required: true, placeholder: '粘贴要审查的代码...' },
    ],
    tags: ['代码', '审查', '质量'],
    isBuiltin: true,
  },

  {
    id: 'code_explain',
    name: '代码解释',
    description: '详细解释代码的功能和工作原理',
    category: 'code',
    template: `请详细解释以下{{language}}代码的功能和工作原理：

\`\`\`{{language}}
{{code}}
\`\`\`

请包括：
1. 代码的主要功能
2. 关键逻辑的解释
3. 使用的技术和模式
4. 可能的应用场景`,
    variables: [
      { name: 'language', label: '编程语言', type: 'text', required: true, defaultValue: 'JavaScript' },
      { name: 'code', label: '代码', type: 'textarea', required: true },
    ],
    tags: ['代码', '解释', '学习'],
    isBuiltin: true,
  },

  {
    id: 'code_optimize',
    name: '代码优化',
    description: '优化代码性能和质量',
    category: 'code',
    template: `请优化以下{{language}}代码，重点关注{{focus}}。

原始代码：
\`\`\`{{language}}
{{code}}
\`\`\`

请提供：
1. 优化后的代码
2. 优化说明
3. 性能提升预期`,
    variables: [
      { name: 'language', label: '编程语言', type: 'text', required: true },
      { name: 'focus', label: '优化重点', type: 'select', required: true,
        options: [
          { label: '性能优化', value: '性能' },
          { label: '代码可读性', value: '可读性' },
          { label: '内存使用', value: '内存' },
          { label: '代码简洁性', value: '简洁性' },
        ]
      },
      { name: 'code', label: '代码', type: 'textarea', required: true },
    ],
    tags: ['代码', '优化', '性能'],
    isBuiltin: true,
  },

  // ==================== 写作相关 ====================
  {
    id: 'blog_post',
    name: '博客文章生成',
    description: '生成结构完整的博客文章',
    category: 'writing',
    template: `请撰写一篇关于"{{topic}}"的博客文章。

要求：
- 目标受众：{{audience}}
- 文章风格：{{style}}
- 字数：约{{wordCount}}字
- 包含实例和代码（如适用）

文章应包括：
1. 吸引人的标题
2. 引言
3. 主体内容（分段落）
4. 总结
5. 行动号召（CTA）`,
    variables: [
      { name: 'topic', label: '主题', type: 'text', required: true, placeholder: '例如：React Hooks 最佳实践' },
      { name: 'audience', label: '目标受众', type: 'text', required: true, defaultValue: '中级开发者' },
      { name: 'style', label: '写作风格', type: 'select', required: true,
        options: [
          { label: '技术教程', value: '技术教程' },
          { label: '经验分享', value: '经验分享' },
          { label: '深度分析', value: '深度分析' },
          { label: '入门指南', value: '入门指南' },
        ]
      },
      { name: 'wordCount', label: '字数', type: 'number', required: true, defaultValue: 1500 },
    ],
    tags: ['写作', '博客', '内容创作'],
    isBuiltin: true,
  },

  {
    id: 'summarize',
    name: '文本摘要',
    description: '生成文本的简洁摘要',
    category: 'writing',
    template: `请为以下内容生成一个{{length}}的摘要：

{{text}}

摘要要求：
- 保留关键信息
- 语言简洁清晰
- {{tone}}`,
    variables: [
      { name: 'text', label: '原文', type: 'textarea', required: true },
      { name: 'length', label: '摘要长度', type: 'select', required: true,
        options: [
          { label: '一句话摘要（50字内）', value: '一句话摘要' },
          { label: '简短摘要（100-200字）', value: '简短摘要' },
          { label: '详细摘要（300-500字）', value: '详细摘要' },
        ]
      },
      { name: 'tone', label: '语气', type: 'text', defaultValue: '客观中立' },
    ],
    tags: ['写作', '摘要', '总结'],
    isBuiltin: true,
  },

  // ==================== 翻译相关 ====================
  {
    id: 'translate',
    name: '专业翻译',
    description: '高质量的文本翻译',
    category: 'translation',
    template: `请将以下{{sourceType}}从{{sourceLang}}翻译成{{targetLang}}。

原文：
{{text}}

翻译要求：
- 保持原文语气和风格
- 术语准确
- 符合目标语言习惯
- 必要时提供注释`,
    variables: [
      { name: 'sourceType', label: '文本类型', type: 'select', required: true,
        options: [
          { label: '技术文档', value: '技术文档' },
          { label: '商务文本', value: '商务文本' },
          { label: '学术论文', value: '学术论文' },
          { label: '日常对话', value: '日常对话' },
        ]
      },
      { name: 'sourceLang', label: '源语言', type: 'text', required: true, defaultValue: '中文' },
      { name: 'targetLang', label: '目标语言', type: 'text', required: true, defaultValue: '英文' },
      { name: 'text', label: '原文', type: 'textarea', required: true },
    ],
    tags: ['翻译', '语言', '本地化'],
    isBuiltin: true,
  },

  // ==================== 分析相关 ====================
  {
    id: 'data_analysis',
    name: '数据分析',
    description: '分析数据并提供洞察',
    category: 'analysis',
    template: `请分析以下数据并提供洞察：

数据类型：{{dataType}}
分析目标：{{goal}}

数据：
{{data}}

请提供：
1. 数据概览
2. 关键发现
3. 趋势分析
4. 建议和行动项`,
    variables: [
      { name: 'dataType', label: '数据类型', type: 'text', required: true, placeholder: '例如：销售数据' },
      { name: 'goal', label: '分析目标', type: 'text', required: true, placeholder: '例如：找出增长机会' },
      { name: 'data', label: '数据', type: 'textarea', required: true },
    ],
    tags: ['分析', '数据', '洞察'],
    isBuiltin: true,
  },

  // ==================== 商务相关 ====================
  {
    id: 'email_draft',
    name: '邮件撰写',
    description: '撰写专业的商务邮件',
    category: 'business',
    template: `请帮我撰写一封{{emailType}}邮件。

收件人：{{recipient}}
主题：{{subject}}
目的：{{purpose}}

邮件要求：
- 语气：{{tone}}
- 长度：{{length}}
- 包含必要的礼貌用语
- 结构清晰`,
    variables: [
      { name: 'emailType', label: '邮件类型', type: 'select', required: true,
        options: [
          { label: '商务洽谈', value: '商务洽谈' },
          { label: '客户回复', value: '客户回复' },
          { label: '内部沟通', value: '内部沟通' },
          { label: '求职信', value: '求职信' },
        ]
      },
      { name: 'recipient', label: '收件人', type: 'text', required: true },
      { name: 'subject', label: '邮件主题', type: 'text', required: true },
      { name: 'purpose', label: '邮件目的', type: 'textarea', required: true },
      { name: 'tone', label: '语气', type: 'select', required: true,
        options: [
          { label: '正式', value: '正式' },
          { label: '友好', value: '友好' },
          { label: '简洁', value: '简洁' },
        ]
      },
      { name: 'length', label: '长度', type: 'select', required: true,
        options: [
          { label: '简短（3-5句）', value: '简短' },
          { label: '中等（2-3段）', value: '中等' },
          { label: '详细（4-5段）', value: '详细' },
        ]
      },
    ],
    tags: ['商务', '邮件', '沟通'],
    isBuiltin: true,
  },

  // ==================== 教育相关 ====================
  {
    id: 'explain_concept',
    name: '概念解释',
    description: '用简单的语言解释复杂概念',
    category: 'education',
    template: `请用{{level}}能理解的方式解释"{{concept}}"这个概念。

要求：
- 使用简单的语言和类比
- 提供实际例子
- 分步骤解释
- 避免专业术语（或解释术语）

{{additionalContext}}`,
    variables: [
      { name: 'concept', label: '概念', type: 'text', required: true, placeholder: '例如：区块链' },
      { name: 'level', label: '目标受众', type: 'select', required: true,
        options: [
          { label: '小学生', value: '小学生' },
          { label: '中学生', value: '中学生' },
          { label: '大学生', value: '大学生' },
          { label: '非技术人员', value: '非技术人员' },
        ]
      },
      { name: 'additionalContext', label: '额外背景（可选）', type: 'textarea', required: false },
    ],
    tags: ['教育', '解释', '学习'],
    isBuiltin: true,
  },

  // ==================== 创意相关 ====================
  {
    id: 'brainstorm',
    name: '头脑风暴',
    description: '生成创意想法和方案',
    category: 'creative',
    template: `请围绕"{{topic}}"进行头脑风暴，生成{{count}}个创意想法。

背景信息：
{{context}}

要求：
- 想法要{{style}}
- 包含每个想法的简要说明
- 评估每个想法的可行性
- 推荐最有潜力的2-3个`,
    variables: [
      { name: 'topic', label: '主题', type: 'text', required: true },
      { name: 'count', label: '想法数量', type: 'number', required: true, defaultValue: 10 },
      { name: 'context', label: '背景信息', type: 'textarea', required: false },
      { name: 'style', label: '想法风格', type: 'select', required: true,
        options: [
          { label: '创新大胆', value: '创新大胆' },
          { label: '实用可行', value: '实用可行' },
          { label: '平衡折中', value: '平衡折中' },
        ]
      },
    ],
    tags: ['创意', '头脑风暴', '想法'],
    isBuiltin: true,
  },

  // ==================== 研究相关 ====================
  {
    id: 'research_outline',
    name: '研究大纲',
    description: '生成研究计划和大纲',
    category: 'research',
    template: `请为"{{topic}}"创建一个详细的研究大纲。

研究类型：{{researchType}}
研究范围：{{scope}}

大纲应包括：
1. 研究背景和意义
2. 研究问题和假设
3. 研究方法
4. 预期成果
5. 时间计划
6. 参考文献方向`,
    variables: [
      { name: 'topic', label: '研究主题', type: 'text', required: true },
      { name: 'researchType', label: '研究类型', type: 'select', required: true,
        options: [
          { label: '文献综述', value: '文献综述' },
          { label: '实证研究', value: '实证研究' },
          { label: '案例研究', value: '案例研究' },
          { label: '理论研究', value: '理论研究' },
        ]
      },
      { name: 'scope', label: '研究范围', type: 'textarea', required: true },
    ],
    tags: ['研究', '学术', '大纲'],
    isBuiltin: true,
  },
];

/**
 * 按类别分组的模板
 */
export function getTemplatesByCategory() {
  const grouped = new Map<string, PromptTemplate[]>();
  
  for (const template of BUILTIN_PROMPT_TEMPLATES) {
    const category = template.category;
    if (!grouped.has(category)) {
      grouped.set(category, []);
    }
    grouped.get(category)!.push(template);
  }
  
  return grouped;
}

